<?php
/**
 * Subpacote de componentes
 *
 * @author esales
 * @version 0.1
 * @copyright opensource.
 * @license http://creativecommons.org/licenses/by/3.0/
 * @link http://esales.com.br
 * @category framework
 * @package componentes
 * @subpackage objFuncoesDados
 *
 *
 */
namespace bibliotecas\componentes\grid\funcoes
	{
		/**
		 *
		 */
		use bibliotecas\componentes\grid\funcoes\objMontaGrid;
		/**
		 * classe abstrata onde contem os metodos de tratamento dos dados de entrada,
		 * para serem passados posteriormente para a classe objBancoFuncoes()
		 *
		 * @abstract objFuncoesDados
		 *
		 */
		abstract class objFuncoesDados extends objMontaGrid
			{
				/**
				 * metodo utilizado para triar os metodos a serem
				 * utilizados, conforme os parametros passados
				 *
				 * @access protected
				 * @param array $parDados
				 * @return array $this->mtdMontaGrid($this->proDadosGrid)
				 *
				 */
				protected function mtdDadosGRID($parDados)
					{
						foreach ($parDados as $parDados['dg1'] => $parDados['dg2'])
							{
								if (!empty($this->proErros))
									{
										break;
									}
								$parDados['mtd'] = 'mtdDados' . substr($parDados['dg1'], 3);
								$this->proDadosGrid[$parDados['dg1']] = $this->$parDados['mtd']($this->proDadosGrid);
							}
						return $this->mtdMontaGrid($this->proDadosGrid);
					}
				/**
				 * Metodo para armazenar as colunas
				 * em $this->proDadosGrid['parColunas']
				 *
				 * @access private
				 * @param array $parDados
				 * @return array $this->proDadosGrid['parColunas']
				 */
				private function mtdDadosColunasNomes($parDados)
					{
						if (empty($this->proErros) && !empty($parDados['parColunasNomes']))
							{
								foreach ($parDados['parColunasNomes'] as $parDados['cn1'] => $parDados['cn2'])
									{
										if (empty($parDados['cn1']) || empty($parDados['cn2']))
											{
												$this->mtdErros(array('mtdDadosColunasNomes' => array('chave/coluna vazio' => $parDados['parColunasNomes'])));
												break;
											}
									}
							}
						return $parDados['parColunasNomes'];
					}
				/**
				 *
				 * Enter description here ...
				 * @param unknown_type $parDados
				 */
				private function mtdDadosNavegacao($parDados)
					{
						if (empty($this->proErros) && !empty($parDados['parNavegacao']))
							{
								if (empty($parDados['parNavegacao']['parStatus']) || empty($parDados['parNavegacao']['parLimite']) || empty($parDados['parNavegacao']['parPagina']) || empty($parDados['parNavegacao']['parTotal']))
									{
										$this->mtdErros(array('mtdDadosNavegacao' => array('parametro vazio' => $parDados['parNavegacao'])));
									}
								else if ($parDados['parNavegacao']['parStatus'] == true && !empty($parDados['parNavegacao']['parLinhasRegistros']))
									{
										$this->proDadosGrid['parLinhasRegistros'] = $this->mtdDadosLinhasRegistros($parDados);
										$parDados['n1'] = $parDados['parNavegacao'];
									}
							}
						return empty($parDados['n1']) ? null : $parDados['n1'];
					}
				/**
				 * metodo para verificar se os dados passados pelo
				 * parametro parRegistros estariam corretamente preenchidos.
				 *
				 * tambem envia para o metodo mtdDadosColunas o primeiro
				 * array de parRegistros, para abstrair as colunas.
				 *
				 * @access private
				 * @param array $parDados
				 * @return array $this->proDadosGrid['parRegistros']
				 */
				private function mtdDadosLinhasRegistros($parDados)
					{
						if (!empty($this->proErros) || empty($parDados['parNavegacao']['parLinhasRegistros']))
							{
								$this->mtdErros(array('mtdDadosLinhasRegistros' => array('coluna/registro vazio' => $parDados['parNavegacao']['parLinhasRegistros'])));
							}
						else
							{
								$this->proDadosGrid['parLinhasRegistrosTotal'] = $this->mtdDadosLinhasRegistrosTotal($parDados);
								$parDados['lr6'] = 0;
								foreach ($parDados['parNavegacao']['parLinhasRegistros'] as $parDados['lr1'] => $parDados['lr2'])
									{
										if ($parDados['lr6'] == $parDados['parNavegacao']['parLimite'])
											{
												break;
											}
										foreach ($parDados['lr2'] as $parDados['lr3'] => $parDados['lr4'])
											{
												if (!empty($parDados['parColunasNomes']) && in_array($parDados['lr3'], $parDados['parColunasNomes']))
													{
														$parDados['lr5'][$parDados['lr1']][] = $parDados['lr4'];
													}
												else if (empty($parDados['parColunasNomes']))
													{
														$parDados['lr5'][$parDados['lr1']][] = $parDados['lr4'];
														$this->proDadosGrid['parColunasNomes'][$parDados['lr3']] = $parDados['lr3'];
													}
											}
										$parDados['lr6'] += 1;
									}
							}
						return empty($parDados['lr5']) ? null : $parDados['lr5'];
					}
				/**
				 *
				 * Enter description here ...
				 * @param unknown_type $parDados
				 */
				private function mtdDadosLinhasRegistrosTotal($parDados)
					{
						foreach ($parDados['parNavegacao']['parLinhasRegistros'] as $parDados['lrt1'] => $parDados['lrt2'])
							{
								foreach ($parDados['lrt2'] as $parDados['lrt3'] => $parDados['lrt4'])
									{
										$parDados['lrt5'][$parDados['lrt1']][$parDados['lrt3']] = $parDados['lrt4'];
									}
							}
						return $parDados['lrt5'];
					}
				/**
				 * verifica os dados passados para o tipo de campo de formulario
				 * para edicao das celulas de registros
				 *
				 * @access private
				 * @param array $parDados
				 * @return array $this->proDadosGrid['parTipoDados']
				 */
				private function mtdDadosEditarDados($parDados)
					{
						if (empty($this->proErros) || !empty($parDados['parEditarDados']))
							{
								foreach ($parDados['parEditarDados'] as $parDados['ed1'] => $parDados['ed2'])
									{
										if (empty($parDados['ed2']['parNome']) || empty($parDados['ed2']['parTipo']) || empty($parDados['ed2']['parAtributos']))
											{
												$this->mtdErros(array('mtdDadosEditarDados' => array('parametro vazio' => $parDados['ed2'])));
												break;
											}
										if ($parDados['ed2']['parTipo'] == 'select')
											{
												if (empty($parDados['ed2']['parOpcoes']))
													{
														$this->mtdErros(array('mtdDadosEditarDados' => array('parametro vazio' => $parDados['ed2']['parOpcoes'])));
														break;
													}
											}
									}
							}
						return empty($parDados['parEditarDados']) ? null : $parDados['parEditarDados'];
					}
				/**
				 * verifica os dados passados para o tipo de campo de formulario
				 * para edicao das celulas de registros
				 *
				 * @access private
				 * @param array $parDados
				 * @return array $this->proDadosGrid['parTipoDados']
				 */
				private function mtdDadosInserirDados($parDados)
					{
						if (empty($this->proErros) || !empty($parDados['parInserirDados']))
							{
								foreach ($parDados['parInserirDados'] as $parDados['ed1'] => $parDados['ed2'])
									{
										if (empty($parDados['ed2']['parNome']) || empty($parDados['ed2']['parTipo']) || empty($parDados['ed2']['parAtributos']))
											{
												$this->mtdErros(array('mtdDadosInserirDados' => array('parametro vazio' => $parDados['ed2'])));
												break;
											}
										if ($parDados['ed2']['parTipo'] == 'select')
											{
												if (empty($parDados['ed2']['parOpcoes']))
													{
														$this->mtdErros(array('mtdDadosInserirDados' => array('parametro vazio' => $parDados['ed2']['parOpcoes'])));
														break;
													}
											}
									}
							}
						return empty($parDados['parInserirDados']) ? null : $parDados['parInserirDados'];
					}
				/**
				 * verifica os dados passados para o tipo de campo de formulario
				 * para edicao das celulas de registros
				 *
				 * @access private
				 * @param array $parDados
				 * @return array $this->proDadosGrid['parTipoDados']
				 */
				private function mtdDadosBuscarDados($parDados)
					{
						if (empty($this->proErros) || !empty($parDados['parBuscarDados']))
							{
								foreach ($parDados['parBuscarDados'] as $parDados['ed1'] => $parDados['ed2'])
									{
										if (empty($parDados['ed2']['parNome']) || empty($parDados['ed2']['parTipo']) || empty($parDados['ed2']['parAtributos']))
											{
												$this->mtdErros(array('mtdDadosBuscarDados' => array('parametro vazio' => $parDados['ed2'])));
												break;
											}
										if ($parDados['ed2']['parTipo'] == 'select')
											{
												if (empty($parDados['ed2']['parOpcoes']))
													{
														$this->mtdErros(array('mtdDadosBuscarDados' => array('parametro vazio' => $parDados['ed2']['parOpcoes'])));
														break;
													}
											}
									}
							}
						return empty($parDados['parBuscarDados']) ? null : $parDados['parBuscarDados'];
					}
				/**
				 * verifica os botoes ou opcoes que o grid
				 * contera.
				 * @access private
				 * @param array $parDados
				 * @return array $this->proDadosGrid['parAdicionais']
				 */
				private function mtdDadosBotoes($parDados)
					{
						if (empty($this->proErros) && !empty($parDados['parBotoes']))
							{
								foreach ($parDados['parBotoes'] as $parDados['b1'] => $parDados['b2'])
									{
										if (empty($parDados['b2']['parTipo']) || empty($parDados['b2']['parStatus']))
											{
												$this->mtdErros(array('mtdDadosBotoes' => array('parametro vazio' => $parDados['parBotoes'])));
												break;
											}
										else if ($parDados['b2']['parStatus'] == true)
											{
												$parDados['b3'][] = $parDados['b2'];
											}
									}
							}
						return empty($parDados['b3']) ? null : $parDados['b3'];
					}
				/**
				 *
				 * Enter description here ...
				 * @param unknown_type $parDados
				 */
				private function mtdDadosSubLinha($parDados)
					{
						if (empty($this->proErros) && !empty($parDados['parSubLinha']))
							{
								foreach ($parDados['parSubLinha'] as $parDados['s1'] => $parDados['s2'])
								{
									if ($parDados['s2']['parStatus'] == true)
									{
										$parDados['s3'][] = $parDados['s2'];
									}
								}
							}
						return empty($parDados['s3']) ? null : $parDados['s3'];
					}
				/**
				 * determina o stilo ou formatacao
				 * das div do grid
				 *
				 * @access private
				 * @param array $parDados
				 * @return array $this->proDadosGrid['parFormatacao']
				 */
				private function mtdDadosFormatacao($parDados)
					{
						if (empty($this->proErros) && !empty($parDados['parFormatacao']))
							{
								if (empty($parDados['parFormatacao']['parDimensao']))
									{
										$this->mtdErros(array('mtdDadosFormatacao' => array('parametro vazio' => $parDados['parFormatacao'])));
										break;
									}
							}
						return $parDados['parFormatacao'];
					}
			}
	}
?>